package cl.whyem.sir.ws.negotiation.impl;

import cl.whyem.sir.ws.ConsultaNegociacionResult;
import cl.whyem.sir.ws.Header;
import cl.whyem.sir.ws.Negociacion;
import cl.whyem.sir.ws.NegociacionServices;
import cl.whyem.sir.ws.PagaNegociacionResult;
import cl.whyem.sir.ws.Rut;
import cl.whyem.sir.ws.Status;
import cl.whyem.sir.ws.utils.FechaUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NegociacionServicesImpl implements NegociacionServices {

    private static Map<String, List<Integer>> deudoresDATA;

    static {
        deudoresDATA = new HashMap<String, List<Integer>>() {
            {
                put("11111111-1", Arrays.asList(new Integer[]{111, 112}));
                put("22222222-2", Arrays.asList(new Integer[]{221, 222}));
                put("33333333-3", Arrays.asList(new Integer[]{331, 332}));
                put("44444444-4", Arrays.asList(new Integer[]{441, 442}));
                put("55555555-5", Arrays.asList(new Integer[]{551, 552}));
                put("66666666-6", Arrays.asList(new Integer[]{661, 662}));
                put("77777777-7", Arrays.asList(new Integer[]{771, 772}));
                put("88888888-8", Arrays.asList(new Integer[]{881, 882}));
                put("99999999-9", Arrays.asList(new Integer[]{991, 992}));
            }
        };
    }

    public ConsultaNegociacionResult consultaNegociaciones(Header header, Rut rut) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public PagaNegociacionResult pagaNegociaciones(Header header, String chnlTransactionId, String pDatetime, List<Negociacion> negociaciones) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public ConsultaNegociacionResult consultaNegociacion(Header header, Rut rut, int id) {
        final Header _header = header;
        final Rut _rut = rut;
        final String _rutString = rut.getNumero()+"-"+rut.getDv();
        final int _id = id;

        ConsultaNegociacionResult result;
        result = new ConsultaNegociacionResult() {
            {
                this.setHeader(_header);
                this.setStatus(new Status() {
                    {
                        if (!deudoresDATA.containsKey(_rutString)) {
                            this.setCodigo(1);
                            this.setMensaje("RUT no es deudor whyem");
                        } else if (deudoresDATA.get(_rutString).contains(_id)) {
                            this.setCodigo(0);
                            this.setMensaje("Negociaciones encontradas en la base de datos");
                            getNegociaciones().add(obtainNegotiationByRUT(_rut, _id));
                        } else {
                            this.setCodigo(3);
                            this.setMensaje("Negociación no existe");
                        }
                    }
                });
            }
        };
        return result;
    }

    public static Negociacion obtainNegotiationByRUT(Rut rut, int id) {
        final Rut _rut = rut;
        Negociacion negociacion = new Negociacion();
        negociacion.setIdNegociacion(id);
        negociacion.setRutDeudor(rut);
        negociacion.setCuota(1 + Integer.valueOf(rut.getDv()));
        negociacion.setFechaNegociacion(FechaUtils.getGregorianCalendar());
        negociacion.setMonto(12000L * Integer.valueOf(rut.getDv()) * id);
        negociacion.setNombreDeudor("Juanito '" + rut.getNumero() + "' Perez");
        negociacion.setTipoDeuda("Crédito");
        negociacion.setOperacion(null);
        negociacion.setProducto(null);
        return negociacion;
    }
}
